from django.shortcuts import render

# Create your views here.
"""
1.登录用户保存在后端
	微登录用户保存在cookie
2.cookie数据（后端）保存的信息有：商品id(sku_id),数量（count）,选中状态（selected）

3.redis保存的时候 数据类型的选取
	Redis的数据时保存在内存中的，原则是：占用尽量少的数据

	因为我们每次去 判断商品是否选中的时候,都需要使用代码来判断,这个就是用代码来换取空间(Redis)
	sku_id,count,selected

	hash        hash_key:  key:value
           cart_user:  sku_id:count
                    selected_sku_id:True

记录 选中的状态
记录选中的商品id的  我们用集合
set         set_key: value2,value5,value1,...
4. cookie数据的 数据格式
   {
        sku_id: {count:xxxx,selected:xxx}
        1:{count:5,selected:True}
        5:{count:50,selected:True}
        9:{count:1,selected:False}
   }

	base64
	因为base64只能处理二进制 所以我们需要将字典转换为二进制

	dict --> pickle(转换为二进制 dumps) --> base64.b64encode (base64.b64encode.decode)
	base64.b64decode() -->pickle(loads) --> dict
	json.dumps(dict)

	base64
	1G=1024M
	1M=1024KB
	1KB = 1024B
	1B = 8bytes

	bytes 是计算机的最小单位 其实它就是 0 1

"""

"""
添加购物车的逻辑

当用户点击添加购物车的时候，前段应该发送一个ajax请求，包含sku_id,count,selected(可选)，token(可选)

1.接收数据
2.获取对应的数据
3.还需要判断用户的登陆状态
4.登录用户redis
	4.1连接redis
	4.2保存数据
	4.3返回相应
5.未登录用户cookie
	5.1先读取cookie数据，判断数据是否存在
	cart = request.cookies.get('cart')

	5.2更新购物车数据

	dict = ()
	5.3我们需要对字典进行处理(  dict --> pickle.dumps --> base64.encode().decode())
	response.set_cookie('cart','gAN9cQBLAX1xAShYCAAAAHNlbGVjdGVkcQKIWAUAAABjb3VudHEDSwV1cy4=')
	5.4返回响应

POST  cart/

"""

from rest_framework.views import APIView
from .serializers import CartSerializer
class CartView(APIView):

	"""
	我们的仕途如果你传递了token会调用仕途的perform_authentication方法
	来验证一个用户的信息

	因为用户的token过期了 或者token 出现了伪造的情况 用户就不能够成功添加到购物车了

	应该先让用户 添加到购物车中 也就是说先不让试图调用 perform_authentication
	"""

	def perform_authentication(self, request):
		pass

	def post(self,request):

		# 1.接收数据
		serializer = CartSerializer(data=request.data)
		serializer.is_valid(raise_exception=True)
		# 2.获取对应的数据
		sku_id = serializer.validated_data.get('sku_id')
		count = serializer.data.get('count')
		selected = serializer.data.get('selected')
		# 3.还需要判断用户的登陆状态
		try:
			user = request.user
		except Exception:
			user = None

		# 判断用户是否是登录状态我们是根据user的一个属性
		# is_authenticated 如果为认证用户，则返回True
		# is_authenticated 如果不为认证用户，则返回False
		# request.user.is_authenticated
		if user is not None and user.is_authenticated:

			# 4.登录用户redis
			# 	4.1连接redis
			# 	4.2保存数据
			# 	4.3返回相应
			pass
		else:
			# 5.未登录用户cookie
			# 	5.1先读取cookie数据，判断数据是否存在
			# 	cart = request.cookies.get('cart')
			#
			# 	5.2更新购物车数据
			#
			# 	dict = ()
			# 	5.3我们需要对字典进行处理(  dict --> pickle.dumps --> base64.encode().decode())
			# 	response.set_cookie('cart','gAN9cQBLAX1xAShYCAAAAHNlbGVjdGVkcQKIWAUAAABjb3VudHEDSwV1cy4=')
			# 	5.4返回响应
			pass


		pass